/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package weka.attributeSelection.semiAS.semiClusterAS;

import java.util.Vector;
import weka.core.ContingencyTables;
import weka.core.Instances;

/**
 *
 * @author Administrator
 */
class EntropyUnlabledDistEval extends UnlabeledDistEval {

    private int m_nLabled;
    private int m_numInstances;

    public EntropyUnlabledDistEval(Instances data) {
        super(data);
    }

    public double getDistance(int i, int j) {
        return 0.0;
//        double[] allXi = m_instances.attributeToDoubleArray(i);
//        double[] allXj = m_instances.attributeToDoubleArray(j);
//        double[] allY = m_instances.attributeToDoubleArray(m_classIndex);
//        double[] labXi = new double[m_nLabled];
//        double[] labXj = new double[m_nLabled];
//        double[] labY = new double[m_nLabled];
//
//        Vector VallXi = new Vector();
//        Vector VallXj = new Vector();
//        Vector VlabXi = new Vector();
//        Vector VlabXj = new Vector();
//        Vector VlabY = new Vector();
//
//        int n = 0;
//        for (int r = 0; r < m_numInstances; r++) {
//            if (m_IsLabled[r]) {
//                labXi[n] = allXi[r];
//                labXj[n] = allXj[r];
//                labY[n] = allY[r];
//                n++;
//            }
//        }
//
//        for (int k = 0; k < m_numInstances; k++) {
//            if (!VallXi.contains(allXi[k])) {
//                VallXi.add(allXi[k]);
//            }
//            if (!VallXj.contains(allXj[k])) {
//                VallXj.add(allXj[k]);
//            }
//        }
//
//        for (int k = 0; k < m_nLabled; k++) {
//            if (!VlabXi.contains(labXi[k])) {
//                VlabXi.add(labXi[k]);
//            }
//            if (!VlabXj.contains(labXj[k])) {
//                VlabXj.add(labXj[k]);
//            }
//            if (!VlabY.contains(labY[k])) {
//                VlabY.add(labY[k]);
//            }
//        }
//
//        int nAllXi = VallXi.size();
//        int nAllXj = VallXj.size();
//        int nLabXi = VlabXi.size();
//        int nLabXj = VlabXj.size();
//        int nLabY = VlabY.size();
//
//        double[][] allUnionTableXij = new double[nAllXi][nAllXj];
//        double[][] allUnionTableXji = new double[nAllXj][nAllXi];
//        double[] labArrayXi = new double[nLabXi];
//        double[] labArrayXj = new double[nLabXj];
//        double[] labArrayY = new double[nLabY];
//        double[] labUnionTableXiY = new double[nLabXi * nLabY];
//        double[] labUnionTableXjY = new double[nLabXj * nLabY];
//        double[] labUnionTableXiXj = new double[nLabXi * nLabXj];
//        double[] labUnionTableXiXjY = new double[nLabXi * nLabXj * nLabY];
//
//        for (int ii = 0; ii < m_numInstances; ii++) {
//            int iInd = VallXi.indexOf(allXi[ii]);
//            for (int jj = 0; jj < m_numInstances; jj++) {
//                int jInd = VallXj.indexOf(allXj[jj]);
//                allUnionTableXij[iInd][jInd]++;
//                allUnionTableXji[jInd][iInd]++;
//            }
//        }
//
//        for (int xx = 0; xx < m_nLabled; xx++) {
//            int iInd = VlabXi.indexOf(labXi[xx]);
//            int jInd = VlabXj.indexOf(labXj[xx]);
//            int yInd = VlabY.indexOf(labY[xx]);
//            labArrayXi[iInd]++;
//            labArrayXj[jInd]++;
//            labArrayY[yInd]++;
//            for (int yy = 0; yy < m_nLabled; yy++) {
//                int yyInd = VlabY.indexOf(labY[yy]);
//                int jjInd = VlabXj.indexOf(labXj[yy]);
//                labUnionTableXiY[iInd * nLabY + yyInd]++;
//                labUnionTableXjY[jInd * nLabY + yyInd]++;
//                labUnionTableXiXj[iInd * nLabXj + jjInd]++;
//                for (int zz = 0; zz < m_nLabled; zz++) {
//                    int yyyInd = VlabY.indexOf(labY[yy]);
//                    labUnionTableXiXjY[iInd * nLabXj * nLabY + jjInd * nLabY + yyyInd]++;
//                }
//            }
//        }
//
//        double HXi_Xj = ContingencyTables.entropyConditionedOnColumns(allUnionTableXij);
//        double HXj_Xi = ContingencyTables.entropyConditionedOnColumns(allUnionTableXji);
//
//        double HXi = ContingencyTables.entropy(labArrayXi);
//        double HXj = ContingencyTables.entropy(labArrayXj);
//        double HY = ContingencyTables.entropy(labArrayY);
//        double HXiY = ContingencyTables.entropy(labUnionTableXiY);
//        double HXjY = ContingencyTables.entropy(labUnionTableXjY);
//        double HXiXj = ContingencyTables.entropy(labUnionTableXiXj);
//        double HXiXjY = ContingencyTables.entropy(labUnionTableXiXjY);
//
//        double IXiY = HXi + HY - HXiY;
//        double IXjY = HXj + HY - HXjY;
//        double IXiXjY = HXiXj + HY - HXiXjY;
//        double IXiY_Xj = IXiXjY - IXjY;
//        double IXjY_Xi = IXiXjY - IXiY;
//
//        double dis = m_unlableWeight * (HXi_Xj + HXj_Xi) + m_lableWeight * (IXiY_Xj + IXjY_Xi);
    }
}
